module Builder where

import Evaluator2
import GameLoop

import Data.Array

-- Генерирует кратчайшую из не зависящих от окружающих условий цепочку аппликаций для получения заданного числа в ячейке
gen_number :: SlotInd -> Int -> [App]
gen_number i n = reverse . map (\a -> a {ap_slot = i}) $ numbers_reversed_table ! n

numbers_reversed_table = array (0, 65535) $ (0, [0 <$ Zero]) : [(k, choose_shortest k) | k <- [1 .. 65535]]
 where nrt = numbers_reversed_table
       choose_shortest k
           | odd k = (Succ $> 0) : (nrt ! (k-1))
           | even k = let n1 = k `div` 2
                          n2 = k - 1
                          l1 = length $ nrt ! n1
                          l2 = length $ nrt ! n2
                      in if l1 < l2 then (Dbl $> 0) : (nrt ! n1) else (Succ $> 0) : (nrt ! n2)